
import axios from "axios";
import {Notification} from "element-ui";
import router from "@/router";


const instance = axios.create({
    baseURL: process.env.VUE_APP_BASE_API,
    timeout: 7000
  });


  let timerId;

  function call(fun){
    if(timerId){
        clearTimeout(timerId);
    }
    timerId = setTimeout(fun,300)
  }




// http request 拦截器
instance.interceptors.request.use(
    config => {

        if (localStorage.token) {  // 判断是否存在token，如果存在的话，则每个http header都加上token
            config.headers.Authorization ='Bearer '+ localStorage.token;
        }
        return config;
    },
    err => {
        return Promise.reject(err);
});


instance.interceptors.response.use(function (response) {

    //如果请求携带了加载 则关闭
    if(response.config.loading){
        response.config.loading.close();
    }

    //统一处理接口返回结果不是200的错误信息
    if(response.data.Code){
        if(response.data.Code!=200){
            call(()=>{
                Notification.error({
                    title: '系统提示',
                    message: response.data.Msg
                });
            })
            return new Promise(()=>{});
        }
    }
    
    //Code==200 正常返回
    return response.data;
  }, function (error) {
    
    //如果请求携带了加载 则关闭
    if(error.config.loading){
        error.config.loading.close();
    }
    // console.log(error)
    //统一处理请求错误时 错误状态码相关信息
    if(error.response && error.response.status){
        switch(error.response.status){
            case 401:
                //统一处理身份到期
                call(()=>{
                    Notification.error({
                        title: '系统提示',
                        message: '身份验证已到期'
                    });
                })
                //跳转登录
                router.push({name:'Login'})
            break;
            case 404:
                //统一处理身份到期
                call(()=>{
                    Notification.error({
                        title: '系统提示',
                        message: '找不到请求地址，请检查URL'
                    });
                })
            break;
            case 500:
                //统一处理身份到期
                call(()=>{
                    Notification.error({
                        title: '系统提示',
                        message: '服务器异常，请稍后再试！'
                    });
                })
            break;
        }
        return new Promise(()=>{});

    }
    else if(error.message.indexOf('timeout')!=-1){
        call(()=>{
            Notification.error({
                title: '系统提示',
                message: '请求超时，请稍后重试！'
            });
        })
        return new Promise(()=>{});
    }
    else if(error.message.indexOf('Network Error')!=-1){

        call(()=>{
            Notification.error({
                title: '系统提示',
                message: '无法连接到服务器，请稍后重试！'
            });
        })
        return new Promise(()=>{});
    }
    else{
        // 对响应错误做点什么
        return Promise.reject(error);
    }
});


export default instance;

